package com.milo.java7.io.file;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import sun.misc.BASE64Decoder;

import java.io.*;
import java.util.Scanner;

/**
 * <p>
 *     1.File介绍
 *     File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建,查找以及删除操作;
 * </p>
 * @author: Milogenius
 * @create: 2019-04-24 10:52
 * @description: {@link File}API学习
 **/
@Slf4j
public class FileTest {

    /**
     * 文件创建
     * @throws IOException
     */
    @Test
    public void test1() throws IOException {
        String text = "首批移动金融App拟备案名单公示，含3家小额贷款公司软件";
        String filePath = "f:\\xwtec/demo.txt";
        File file = new File(filePath);
        log.info("file:" + file);
        //判断路径有父级目录,就先创建目录
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        if (file.exists()) {
            file.delete();
            log.info("执行了删除文件！");
        } else {
            file.createNewFile();
            log.info("执行了创建文件");
            FileWriter writer = new FileWriter(file);
            writer.write(text);
            writer.flush();
            writer.close();

            //紧接着读出文件数据
            FileReader reader = new FileReader(file);
            int read = reader.read();
            while(read != -1) {
                System.out.print((char)read);
                //当未读取到文件末尾时 继续读取下1个字符
                read = reader.read();

            }

        }

    }


    /**
     * 创建目录
     */
    @Test
    public void test2() {
        String dirname = "f:\\xwtec\\tmp/user\\java\\bin";
        File d = new File(dirname);
        // 现在创建目录
        d.mkdirs();
    }

    /**
     * 读取目录
     */
    @Test
    public void test3() {
        String dirname = "f:\\xwtec/tmp/user/java";
        File f1 = new File(dirname);
        if (f1.isDirectory()) {
            log.info("目录 " + dirname);
            String s[] = f1.list();
            for (int i = 0; i < s.length; i++) {
                File f = new File(dirname + "/" + s[i]);
                if (f.isDirectory()) {
                    log.info(s[i] + " 是一个目录");
                } else {
                    log.info(s[i] + " 是一个文件");
                }
            }
        } else {
            log.info(dirname + " 不是一个目录");
        }
    }

    /**
     * 删除文件及目录
     */
    @Test
    public void test4() {
        // 这里修改为自己的测试目录
        File folder = new File("f:\\xwtec/tmp/java/");
        deleteFolder(folder);
    }

    public static void deleteFolder(File folder) {
        File[] files = folder.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isDirectory()) {
                    deleteFolder(f);
                } else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }

    /**
     * 文件相关属性
     */
    @Test
    public void test5(){
        File file = new File("f:\\filename.txt");
        try {
            file.createNewFile();
            if (file.exists()) {
                log.info("文件名: " + file.getName());
                log.info("绝对路径: " + file.getAbsolutePath());
                log.info("可写: " + file.canWrite());
                log.info("可读: " + file.canRead());
                log.info("文件大小(字节): " + file.length());
            } else {
                log.info("文件不存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
